//
//  RZMessageBaseCell.m
//  RZIM
//
//  Created by reyzhang on 2021/8/19.
//

#import "RZMessageBaseCell.h"
#import "RZMessageCellTool.h"


@implementation RZMessageBaseCell

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self commonInit];
    }
    return self;
}


- (void)commonInit {
    self.baseContentView = [[UIView alloc] initWithFrame:CGRectZero];
    [self.contentView addSubview:_baseContentView];
}



/*!
 自定义消息Cell的Size

 @param model               要显示的消息model
 @param collectionViewWidth cell所在的collectionView的宽度
 @param extraHeight         cell内容区域之外的高度

 @return 自定义消息Cell的Size

 @discussion 当应用自定义消息时，必须实现该方法来返回cell的Size。
 其中，extraHeight是Cell根据界面上下文，需要额外显示的高度（比如时间、用户名的高度等）。
 一般而言，Cell的高度应该是内容显示的高度再加上extraHeight的高度。
 */
+ (CGSize)sizeForMessageModel:(RZMessageInfo *)model
      withCollectionViewWidth:(CGFloat)collectionViewWidth
         referenceExtraHeight:(CGFloat)extraHeight {
    return CGSizeZero;
}

/*!
 设置当前消息Cell的数据模型

 @param model 消息Cell的数据模型
 */
- (void)setDataModel:(RZMessageInfo *)model {
    self.model =  model;
    
    [self setBaseAutoLayout];
}



- (void)setBaseAutoLayout {
    [self.baseContentView setFrame:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height - (BASE_CONTENT_VIEW_BOTTOM))];
}




/**
 工厂方法创建具体对象
 */
+ (instancetype)createInstanceWithCollectionView:(UICollectionView *)collectionView forMessage:(RZMessageInfo *)message atIndexPath:(NSIndexPath *)indexPath {
    
    NSString *key = [RZMessageCellTool getMessageCellKey:message.subType];
    NSString *cellClassName  = [[RZMessageCellTool messageCellClassMap] objectForKey:key];
    if (cellClassName.length > 0) {
        
        Class cls = NSClassFromString(cellClassName);
        if (cls) {
            [collectionView registerClass:cls forCellWithReuseIdentifier:cellClassName];
        }
        return [collectionView dequeueReusableCellWithReuseIdentifier:cellClassName forIndexPath:indexPath];
    }else {
        [collectionView registerClass:[RZMessageBaseCell class] forCellWithReuseIdentifier:@"DefaultCell"];
        return [collectionView dequeueReusableCellWithReuseIdentifier:@"DefaultCell" forIndexPath:indexPath];
    }
    
}
@end
